package com.shujia.method_.eight;

/*
递归
方法是可以嵌套调用其它的方法
方法也可以嵌套调用它自己
嵌套调用自己就是递归

用递归能解决的问题使用循环都能解决
循环都能解决了为什么还要用递归
1,代码很简洁
缺点
1,很绕, 不好理解
2,效率并不高, 比循环效率低

在真实的开发中, 递归使用的并不多,在某些场景下使用递归会很方便
 */
public class MethodDemo1 {
    // 求阶乘
    // 5! = 5 * 4 * 3 * 2 * 1;
    public static void main(String[] args) {
        // 记录当前时间毫秒
        long start = System.currentTimeMillis();
        int result = jcTest1(20);
        System.out.println(result);


//        int result = jc(20);
//        System.out.println(result);

        System.out.println(System.currentTimeMillis() - start);

    }

    public static int jc(int num) {
        if (num == 1) {
            return 1;
        }
        return num * jc(num - 1);
    }


    // 非递归的方式
    public static int jcTest1(int num) {
        int result = 1;
        for (int i = num; i >= 1; i--) {
            result *= i;
        }
        return result;
    }


}
